# -*- coding: utf-8 -*-

index_a = ["000300", "399905", "INX", "HSI", "H11025", "Au99.99"]
index_equity = ['000300.SH', '399005.SZ', 'SPX.GI', 'HSI.HI']
index_b = ["CBA00601.CS", "CBA02701.CS"]
equity_dict = {x: y for x, y in zip(index_a[:4], index_equity)}

# 大类资产相关常量
INDEX_LIST = ['000001', '000016', '399005', '399006', 'HSI', 'INX',
              'AU99.99', 'CBA00201.CS', 'CBA01901.CS', 'CBA03801.CS', 'CBA00621.CS',
              'CBA00651.CS', '399413', 'NHII', 'NHAI', 'SPGSCL']  # 根据需要选择
ASSET_LIST = ['整体A股', 'A股大盘', 'A股中小盘', '创业板', '港股', '美股', '黄金', '整体债券',
              '投资级信用债', '高收益信用债', '短期利率债', '长期利率债', '可转债', '工业品', '农产品', '原油']
ASSET_GRP_DICT = {'整体A股': '股票市场', 'A股大盘': '股票市场', 'A股中小盘': '股票市场', '创业板': '股票市场',
                  '港股': '股票市场', '美股': '股票市场', '整体债券': '债券市场', '投资级信用债': '债券市场',
                  '高收益信用债': '债券市场', '短期利率债': '债券市场', '长期利率债': '债券市场', '可转债': '债券市场',
                  '黄金': '商品', '工业品': '商品', '农产品': '商品', '原油': '商品'}
ASSET_DICT = {x: y for x, y in zip(ASSET_LIST, INDEX_LIST)}
ASSET_DICT_REV = {x: y for y, x in zip(ASSET_LIST, INDEX_LIST)}
ASSET_INDEX_DICT = {'A股': '000001', '债券': 'H11001', '现金': 'H11025'}

# 中证800行业相关常量
ZZ_WIND_LIST = ['000928.SH', '000929.CSI', '000930.CSI', '000931.CSI', '000932.SH', '000933.SH',
                '000934.SH', '000935.SH', '000936.CSI', '000937.CSI']
ZZ_CODE_LIST = [x[:6] for x in ZZ_WIND_LIST]
ZZ_NAME_LIST = ['中证能源', '中证材料', '中证工业', '中证可选', '中证消费', '中证医药', '中证金融', '中证信息', '中证电信', '中证公用']
ZZ_CODE_DICT = {x: y for x, y in zip(ZZ_CODE_LIST, ZZ_NAME_LIST)}
ZZ_WIND_DICT = {x: y for x, y in zip(ZZ_WIND_LIST, ZZ_NAME_LIST)}

# 中证全指行业相关常量
ZZ_FULL_LIST = [f'0009{n}' for n in range(86, 96)]

# 申万行业相关常量
# def get_sw_name_dict():
#     sw_ind = pd.read_sql("select distinct c.index_code, substr(i.index_sname,1) as name "
#                          "from idx_components as c,idx_baseinfo as i "
#                          f"where c.index_code in {tuple(SW_CODE_LIST)}"
#                          "and c.index_code = i.index_code "
#                          "and left(c.secu_code,1) in ('3','6','0') ",
#                          get_derivative_factor_db_conn())
#     sw_ind['index_code'] = sw_ind['index_code'].apply(lambda x: x + '.SI')
#     sw_ind_dict = sw_ind.set_index('index_code')['name'].to_dict()
#     return sw_ind_dict


SW_CODE_LIST = ['801010', '801020', '801030', '801040', '801050', '801080', '801110', '801120',
                '801130', '801140', '801150', '801160', '801170', '801180', '801200', '801210',
                '801230', '801710', '801720', '801730', '801740', '801750', '801760', '801770',
                '801780', '801790', '801880', '801890']
SW_WIND_LIST = [x + '.SI' for x in SW_CODE_LIST]
SW_NAME_LIST = ['申万一级农林牧渔', '申万一级采掘', '申万一级化工', '申万一级钢铁', '申万一级有色金属',
                '申万一级电子', '申万一级家用电器', '申万一级食品饮料', '申万一级纺织服装', '申万一级轻工制造',
                '申万一级医药生物', '申万一级公用事业', '申万一级交通运输', '申万一级房地产', '申万一级商业贸易',
                '申万一级休闲服务', '申万一级综合', '申万一级建筑材料', '申万一级建筑装饰', '申万一级电气设备',
                '申万一级国防军工', '申万一级计算机', '申万一级传媒', '申万一级通信', '申万一级银行',
                '申万一级非银金融', '申万一级汽车', '申万一级机械设备']
SW_SNAME_LIST = ['农林牧渔', '采掘', '化工', '钢铁', '有色金属', '电子', '家用电器', '食品饮料', '纺织服装',
                 '轻工制造', '医药生物', '公用事业', '交通运输', '房地产', '商业贸易', '休闲服务', '综合',
                 '建筑材料', '建筑装饰', '电气设备', '国防军工', '计算机', '传媒', '通信', '银行', '非银金融',
                 '汽车', '机械设备']
SW_CN_EN_NAME_DICT = {'银行': 'bank', '交通运输': 'transportation', '休闲服务': 'leiservice', '传媒': 'media',
                      '公用事业': 'utilities',
                      '农林牧渔': 'agriforest', '化工': 'chem', '医药生物': 'health', '商业贸易': 'commetrade',
                      '国防军工': 'aerodef',
                      '家用电器': 'houseapp', '建筑材料': 'conmat', '建筑装饰': 'builddeco', '房地产': 'realestate',
                      '有色金属': 'nonfermetal', '机械设备': 'machiequip', '汽车': 'auto', '电子': 'electronics',
                      '电气设备': 'eleceqp',
                      '纺织服装': 'textile', '综合': 'conglomerates', '计算机': 'computer', '轻工制造': 'lightindus',
                      '通信': 'telecom',
                      '采掘': 'mining', '钢铁': 'ironsteel', '非银金融': 'nonbankfinan', '食品饮料': 'foodbever'}
SW_OLD_NEW_MAPPING = {'110000': '110000',
                      '210000': '210000',
                      '220000': '220000',
                      '230000': '230000',
                      '240000': '240000',
                      '270000': '270000',
                      '310100': '280000',
                      '310200': '280000',
                      '310400': '280000',
                      '330000': '330000',
                      '340000': '340000',
                      '350000': '350000',
                      '360000': '360000',
                      '370000': '370000',
                      '410000': '410000',
                      '420000': '420000',
                      '430000': '430000',
                      '450000': '450000',
                      '460000': '460000',
                      '440100': '480000',
                      '440200': '490000',
                      '440300': '490000',
                      '440400': '490000',
                      '510000': '510000',
                      '250100': '610000',
                      '250200': '620000',
                      '260400': '630000',
                      '260100': '640000',
                      '260200': '640000',
                      '260300': '640000',
                      '260500': '640000',
                      '310306': '640000',
                      '310301': '280000',
                      '310304': '650000',
                      '310305': '650000',
                      '310307': '650000',
                      '320200': '710000',
                      '470300': '710000',
                      '470200': '720000',
                      '470400': '720000',
                      '320100': '730000',
                      }
SW_INDUSTRY_CODE_SNAME = {'110000': '农林牧渔',
                          '210000': '采掘',
                          '220000': '化工',
                          '230000': '钢铁',
                          '240000': '有色金属',
                          '270000': '电子',
                          '330000': '家用电器',
                          '340000': '食品饮料',
                          '350000': '纺织服装',
                          '360000': '轻工制造',
                          '370000': '医药生物',
                          '410000': '公用事业',
                          '420000': '交通运输',
                          '430000': '房地产',
                          '450000': '商业贸易',
                          '460000': '休闲服务',
                          '510000': '综合',
                          '610000': '建筑材料',
                          '620000': '建筑装饰',
                          '630000': '电气设备',
                          '650000': '国防军工',
                          '710000': '计算机',
                          '720000': '传媒',
                          '730000': '通信',
                          '480000': '银行',
                          '490000': '非银金融',
                          '280000': '汽车',
                          '640000': '机械设备',

                          }
SW_CODE_DICT = {x: y for x, y in zip(SW_CODE_LIST, SW_NAME_LIST)}
SW_WIND_DICT = {x: y for x, y in zip(SW_WIND_LIST, SW_NAME_LIST)}
SW_CODE_SNAME_DICT = {x: y for x, y in zip(SW_CODE_LIST, SW_SNAME_LIST)}
SW_WIND_SNAME_DICT = {x: y for x, y in zip(SW_WIND_LIST, SW_SNAME_LIST)}
SW_CODE_EN_NAME_DICT = {x: SW_CN_EN_NAME_DICT[SW_CODE_SNAME_DICT[x]] for x in SW_CODE_LIST}
SW_INDUSTRY_CODE_TRANS_DICT = {x: y for x, y in zip(list(SW_INDUSTRY_CODE_SNAME.keys()), SW_CODE_LIST)}

# SW_WIND_DICT = {'801010.SI': '申万一级农林牧渔',
#                 '801020.SI': '申万一级采掘',
#                 '801030.SI': '申万一级化工',
#                 '801040.SI': '申万一级钢铁',
#                 '801050.SI': '申万一级有色金属',
#                 '801080.SI': '申万一级电子',
#                 '801110.SI': '申万一级家用电器',
#                 '801120.SI': '申万一级食品饮料',
#                 '801130.SI': '申万一级纺织服装',
#                 '801140.SI': '申万一级轻工制造',
#                 '801150.SI': '申万一级医药生物',
#                 '801160.SI': '申万一级公用事业',
#                 '801170.SI': '申万一级交通运输',
#                 '801180.SI': '申万一级房地产',
#                 '801200.SI': '申万一级商业贸易',
#                 '801210.SI': '申万一级休闲服务',
#                 '801230.SI': '申万一级综合',
#                 '801710.SI': '申万一级建筑材料',
#                 '801720.SI': '申万一级建筑装饰',
#                 '801730.SI': '申万一级电气设备',
#                 '801740.SI': '申万一级国防军工',
#                 '801750.SI': '申万一级计算机',
#                 '801760.SI': '申万一级传媒',
#                 '801770.SI': '申万一级通信',
#                 '801780.SI': '申万一级银行',
#                 '801790.SI': '申万一级非银金融',
#                 '801880.SI': '申万一级汽车',
#                 '801890.SI': '申万一级机械设备'}


CSRC_CODE_DICT = {'A': '农、林、牧、渔业',
                  'B': '采矿业',
                  'C': '制造业',
                  'D': '电力、热力、燃气及水生产和供应业',
                  'E': '建筑业',
                  'F': '批发和零售业',
                  'G': '交通运输、仓储和邮政业',
                  'H': '住宿和餐饮业',
                  'I': '信息传输、软件和信息技术服务业',
                  'J': '金融业',
                  'K': '房地产业',
                  'L': '租赁和商务服务业',
                  'M': '科学研究和技术服务业',
                  'N': '水利、环境和公共设施管理业',
                  'O': '居民服务、修理和其他服务业',
                  'P': '教育',
                  'Q': '卫生和社会工作',
                  'R': '文化、体育和娱乐业',
                  'S': '综合'}

self_built_index_dict = {
    # 股债混合指数
    'TK50B50S': {'CBA00301.CS': 0.5, '000300': 0.5},  # 50%中债总指数+50%沪深300
    'TK90B10S': {'CBA00301.CS': 0.9, '000300': 0.1},  # 90%中债总指数+10%沪深300
    'TK70B30S': {'CBA00301.CS': 0.7, '000300': 0.3},  # 70%中债总指数+30%沪深300
    'TK30B70S': {'CBA00301.CS': 0.3, '000300': 0.7},  # 30%中债总指数+70%沪深300
    'TK50S50H': {'000300': 0.5, 'HSI': 0.5},  # 50%沪深300+50%恒生指数
    'TK50B25S25H': {'CBA00301.CS': 0.5, '000300': 0.25, 'HSI': 0.25},  # 50%中债总指数+25%沪深300+25%恒生指数
    'TK80B15C05S': {'CBA00301.CS': 0.8, '000832': 0.15, '000300': 0.05},  # 80%中债总指数+15%中证转债+5%沪深300

    # (消费，周期，金融，TMT，制造业，其他) 通联魔方板块划分方法
    # 消费板块：食品饮料、家用电器、医药生物；
    # 周期板块：钢铁、采掘、有色金属、化工、建筑材料、交通运输；
    # 金融板块：银行、非银金融、房地产；
    # TMT板块：电子、通信、计算机、传媒；
    # 制造业板块：汽车、国防军工、电气设备、机械设备；
    # 其他板块：农林牧渔、商业贸易、轻工制造、纺织服装、休闲服务、建筑装饰、公用事业、综合；
    'TKCONSUME': {'801120': 1 / 3, '801110': 1 / 3, '801150': 1 / 3},  # 思迪消费板块指数-通联
    'TKCYCLE': {'801040': 1 / 6, '801020': 1 / 6, '801050': 1 / 6, '801030': 1 / 6,  # 思迪周期板块指数-通联
                '801710': 1 / 6, '801170': 1 / 6},
    'TKFINANCE': {'801780': 1 / 3, '801790': 1 / 3, '801180': 1 / 3},  # 思迪金融板块指数-通联
    'TKTMT': {'801080': 1 / 4, '801770': 1 / 4, '801750': 1 / 4, '801760': 1 / 4},  # 思迪成长板块指数-通联
    'TKMANUFACTURE': {'801880': 1 / 4, '801740': 1 / 4, '801730': 1 / 4, '801890': 1 / 4},  # 思迪制造板块指数-通联
    'TKOTHER': {'801010': 1 / 8, '801200': 1 / 8, '801140': 1 / 8, '801130': 1 / 8,  # 思迪其他板块指数-通联
                '801210': 1 / 8, '801720': 1 / 8, '801160': 1 / 8, '801230': 1 / 8},

    # (周期上游，中游，下游，大金融，消费，成长，其他）华泰6板块  - 参考 《20190702-华泰证券-华泰行业轮动系列报告之八：再探周期视角下的资产轮动》
    # 周期上游：采掘，有色金属
    # 周期中游：钢铁，化工，公共事业，交通运输
    # 周期下游：建筑材料，建筑装饰，汽车，机械设备
    # 大金融：银行，非银金融，房地产
    # 消费：轻工制造，商业贸易，休闲服务，家用电器，纺织服装，医药生物，食品饮料，农林牧渔
    # 成长：计算机，传媒，通讯，电气设备，电子
    # 其他：国防军工，综合
    'TKCYCLEUP_HT': {'801020': 1 / 2, '801050': 1 / 2},  # 思迪周期上游板块指数-华泰
    'TKCYCLEMID_HT': {'801040': 1 / 4, '801030': 1 / 4, '801160': 1 / 4, '801170': 1 / 4},  # 思迪周期中游板块指数-华泰
    'TKCYCLEDOWN_HT': {'801710': 1 / 4, '801720': 1 / 4, '801880': 1 / 4, '801890': 1 / 4},  # 思迪周期下游板块指数-华泰
    'TKFINANCE_HT': {'801780': 1 / 3, '801790': 1 / 3, '801180': 1 / 3},  # 思迪金融板块指数-华泰
    'TKCONSUME_HT': {'801140': 1 / 8, '801200': 1 / 8, '801210': 1 / 8, '801110': 1 / 8,  # 思迪消费板块指数-华泰
                     '801130': 1 / 8, '801150': 1 / 8, '801120': 1 / 8, '801010': 1 / 8},
    'TKGROWTH_HT': {'801750': 1 / 5, '801760': 1 / 5, '801770': 1 / 5,  # 思迪成长板块指数-华泰
                    '801730': 1 / 5, '801080': 1 / 5},
    'TKOTHER_HT': {'801740': 1 / 2, '801230': 1 / 2},  # 思迪其他板块指数-华泰

    # (金融，消费，医药，成长，周期，稳定) 申万宏源研报 - 参考 《风格轮动与行业聚类_2017-09-18_申万宏源研究》，有一些调整
    # 1、金融 （银行、非银金融、房地产）
    # 2、消费 （家用电器、食品饮料）
    # 3、医药 （医药生物）
    # 4、成长 （计算机、传媒、通信、电气设备、电子）
    # 5、周期 （采掘、钢铁、有色金属、化工）
    # 6、稳定 （农林牧渔、公共事业、交通运输、建筑材料、建筑装饰、国防军工、汽车、机械设备，商业贸易、轻工制造、纺织服装、休闲服务、综合）
    'TKFINANCE_SW': {'801780': 1 / 3, '801790': 1 / 3, '801180': 1 / 3},  # 思迪金融板块指数
    'TKCONSUME_SW': {'801110': 1 / 2, '801120': 1 / 2},  # 思迪消费板块指数
    'TKMEDICAL_SW': {'801150': 1},  # 思迪医药板块指数
    'TKGROWTH_SW': {'801750': 1 / 5, '801760': 1 / 5, '801770': 1 / 5,  # 思迪成长板块指数
                    '801730': 1 / 5, '801080': 1 / 5},
    'TKCYCLE_SW': {'801020': 1 / 4, '801050': 1 / 4, '801040': 1 / 4, '801030': 1 / 4},  # 思迪周期板块指数
    'TKSTABLE_SW': {'801010': 1 / 13, '801160': 1 / 13, '801170': 1 / 13, '801710': 1 / 13,  # 思迪稳定板块指数
                    '801720': 1 / 13, '801740': 1 / 13, '801880': 1 / 13, '801890': 1 / 13,
                    '801200': 1 / 13, '801140': 1 / 13, '801130': 1 / 13, '801210': 1 / 13,
                    '801230': 1 / 13},
}

SECTOR_CODE_TRANS_DICT = {
    '801780': 'TKFINANCE_SW',
    '801790': 'TKFINANCE_SW',
    '801180': 'TKFINANCE_SW',
    '801110': 'TKCONSUME_SW',
    '801120': 'TKCONSUME_SW',
    '801150': 'TKMEDICAL_SW',
    '801750': 'TKGROWTH_SW',
    '801760': 'TKGROWTH_SW',
    '801770': 'TKGROWTH_SW',
    '801730': 'TKGROWTH_SW',
    '801080': 'TKGROWTH_SW',
    '801020': 'TKCYCLE_SW',
    '801050': 'TKCYCLE_SW',
    '801040': 'TKCYCLE_SW',
    '801030': 'TKCYCLE_SW',
    '801010': 'TKSTABLE_SW',
    '801160': 'TKSTABLE_SW',
    '801170': 'TKSTABLE_SW',
    '801710': 'TKSTABLE_SW',
    '801720': 'TKSTABLE_SW',
    '801740': 'TKSTABLE_SW',
    '801880': 'TKSTABLE_SW',
    '801890': 'TKSTABLE_SW',
    '801200': 'TKSTABLE_SW',
    '801140': 'TKSTABLE_SW',
    '801130': 'TKSTABLE_SW',
    '801210': 'TKSTABLE_SW',
    '801230': 'TKSTABLE_SW',
}

SECTOR_CODE_DICT = {
    'TKFINANCE_SW': '金融板块',
    'TKCONSUME_SW': '消费板块',
    'TKMEDICAL_SW': '医疗板块',
    'TKGROWTH_SW': '成长板块',
    'TKCYCLE_SW': '周期板块',
    'TKSTABLE_SW': '稳定板块',
}

MACRO_FACTOR_GRP_DICT = {'M1同比增长': '货币政策',
                         'M2同比增长': '货币政策',
                         'M1与M2同比增速差值': '货币政策',
                         '社会融资规模当月值': '货币政策',
                         '工业增加值同比增长': '经济增长',
                         '中国PMI': '经济增长',
                         '电厂耗煤量同比': '经济增长',
                         'CPI同比增长': '通胀预期',
                         'PPI同比增长': '通胀预期',
                         '固定资产投资累计同比': '经济增长',
                         '融资融券余额': '流动性',
                         '成交量': '流动性',
                         '换手率': '流动性',
                         'LIBOR-OIS利差': '流动性',
                         '消费者信心指数': '通胀预期',
                         '中国香港失业率': '经济增长',
                         '中国香港CPI': '通胀预期',
                         '恒生AH股溢价指数': '估值',
                         '港元兑人民币': '货币政策',
                         '香港外汇储备资产': '货币政策',
                         '香港外汇储备资产同比': '货币政策',
                         '香港零售业总销货当月同比': '经济增长',
                         '香港出口商品贸易价值指数当月同比': '经济增长',
                         '沪深300市盈率': '估值',
                         '市盈率': '估值',
                         '市净率': '估值',
                         '美国股债收益比': '估值',
                         '美股市盈率': '估值',
                         '股债收益比': '估值',
                         '金银比': '估值',
                         '中美10年国债利差': '估值',
                         '沪深300成交量': '风险偏好',
                         '三个月动量': '风险偏好',
                         '期限利差': '风险偏好',
                         '美国期限利差': '风险偏好',
                         'A股三个月波动率': '风险偏好',
                         '三个月波动率': '风险偏好',
                         '黄金现货价格': '估值',
                         '白银现货价格': '估值',
                         '波动率指数VIX': '风险偏好',
                         '圣路易斯金融压力指数': '风险偏好',
                         '全球新冠肺炎新增': '事件驱动',
                         '全球GDP增速': '经济增长',
                         '美国新增非农就业人数': '经济增长',
                         '美国GDP同比增长': '经济增长',
                         '美国CPI同比增长': '通胀预期',
                         '美国PPI同比增长': '通胀预期',
                         '美元兑人民币': '货币政策',
                         '美国M1': '货币政策',
                         '美国制造业新增订单同比': '经济增长',
                         '美国制造业PMI': '经济增长',
                         '美国工业总产值同比': '经济增长',
                         '1年国债收益率': '货币政策',
                         '10年国债收益率': '货币政策',
                         '美元指数': '货币政策',
                         '美国10年国债收益率': '货币政策',
                         '美国1年国债收益率': '货币政策',
                         '10年TIPS收益率': '货币政策',
                         'LIBOR隔夜利率': '货币政策',
                         '美国联邦基金利率': '货币政策',
                         'FOMC降息概率': '货币政策',
                         'SPDRETF持仓量': '流动性',
                         'COMEX黄金非商业多头持仓': '流动性',
                         'WTI原油结算价': '通胀预期'}

INDUSTRY_GRP_DICT = {'ROE环比增量': '盈利能力',
                     'ROA同比增量': '盈利能力',
                     '销售毛利率同比增量': '盈利能力',
                     '销售净利率环比增量': '盈利能力',
                     '营业收入同比增长率': '成长能力',
                     '净利润同比增长率': '成长能力',
                     '经营活动现金流同比增长率': '成长能力',
                     '夏普比率与最大日收益率复合因子': '动量因子',
                     '路程调整动量和多日动量波动率结合因子': '动量因子',
                     '市净率': '估值因子',
                     '市销率': '估值因子',
                     '市现率': '估值因子',
                     '市盈率': '估值因子',
                     '总资产周转率环比增量': '景气度因子',
                     '一致预期ROE同比增量': '景气度因子',
                     '行业销售净利率环比增量': '景气度因子',
                     '流动性指标': '行业风险因子',
                     '乖离率指标': '行业风险因子',
                     '波动率指标': '行业风险因子',
                     '量价相关性指标': '行业风险因子',
                     '分布特征指标': '行业风险因子',
                     }
